home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / STRINGS.SWG / 0013_STR-INFO.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  2KB  |  57 lines

  1. {
  2. Functions returning Strings are generally space wasters.  For example,
  3. suppose you have :
  4.  
  5. Function UpCaseStr(s : String) : String;
  6.  
  7. if you're implementing it in plain Pascal, you'll need 1024 Bytes of data
  8. at a minimum:
  9. - 256 Bytes are allocated For "s", the Formal parameter
  10. - 256 Bytes For a local copy of "s" since it was passed as a value parameter
  11. - 256 Bytes For a local Variable of the Type String, working storage to build
  12.       the Function result
  13. - 256 Bytes For assigning the result to the Function result
  14.       (as in: "UpCaseStr := Result").
  15.  
  16. You can cut this figure by 50% by taking the following steps:
  17. - (Version 7) Change the parameter header into
  18.   "Function UpCaseStr(Const s : String) : String".  Provided you don't
  19.   change "s", no local copy of the String will be created.
  20. - (Version 6) Implement the routine in Assembler.  Requires knowledge of
  21.   Asm, of course - but it generally will do away With the need of allocating
  22.   256 Bytes of working storage.
  23.  
  24. Now you have reduced data space to 512 Bytes: it has become a basic
  25. input-output Function.  One question remains: it is necessary to load the
  26. String to examine the result of such a Function.  Suppose we want to figure out
  27. whether the user has entered a switch on the command line: do we need a
  28. Variable of the Type String to acComplish this?  You don't.  The following
  29. snippet of code will show how: using a 2 Bytes macro, we'll convert a String
  30. into a Pointer to a String.  You only have to dereference the Pointer to get
  31. the result - and save 256 Bytes of data space in the process.
  32. }
  33.  
  34. Type
  35.   PString      = ^String;
  36.  
  37. Function StrPtr(Const s : String) : PString;
  38.  
  39. InLine(
  40.   $58/         { POP  AX }
  41.   $5A);        { POP  DX }
  42.  
  43. Var
  44.   i            : Integer;
  45.   sp           : PString;
  46.   QuietFlag    : Boolean;
  47.  
  48. begin
  49.   For i := 1 to ParamCount Do
  50.     begin
  51.       sp := StrPtr(ParamStr(i));
  52.       if (sp^[1] in ['/', '-']) and (UpCase(sp^[2]) = 'Q') then
  53.         QuietFlag := True;
  54.       { Et cetera }
  55.     end;
  56. end.
  57.